home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / programm / gemfsc19 / gemfsc19.lzh / GEMFUNCS / WNDUPDAT.C < prev    next >
C/C++ Source or Header  |  1993-02-01  |  963b  |  32 lines

  1. /**************************************************************************
  2.  * WNDUPDAT.C - Implement nested wind_update() logic.
  3.  *************************************************************************/
  4.  
  5. #include "gemfintl.h"
  6.  
  7. #undef wind_update      /* undo GEMFAST.H remapping, we need The Real Thing */
  8.  
  9. static short  windowcount;
  10. static short  mousecount;
  11.  
  12. short wnd_update(flag)
  13.   short flag;
  14. {
  15.     short *counter;
  16.  
  17.     counter = (flag & 0x0002) ? &mousecount : &windowcount;
  18.  
  19.     if (flag & 0x0001) {                /* BEG_UPDATE or BEG_MCTRL, count */
  20.         if (++(*counter) == 1) {        /* it. if we went from 0 to 1, we */
  21.             return wind_update(flag);    /* need to aquire the semaphore.  */
  22.         }
  23.     } else {                                /* END_UPDATE or END_MCTRL      */
  24.         if (*counter > 0) {                 /* if we're currently holding */
  25.             if (--(*counter) == 0) {        /* semaphore, decr count, if  */
  26.                 return wind_update(flag);    /* it goes to 0, release it.  */
  27.             }
  28.         }
  29.     }
  30.     return 1;
  31. }
  32.